package Server.ServerCore.Service.hardCode;

import Server.ExtComponents.utilsKit.Rnd;
import javolution.util.FastList;

import java.util.Collections;

/**
 * @author :石头哥哥<br/>
 *         Project:21Server
 *         Date: 13-4-1
 *         Time: 下午5:43
 *         2.3.4.5.6.7.8.9.10.11（J）.12(Q).13(K).14(A)
 */
public enum CardType{
    card_2((byte)1,"2",2),
    card_3((byte)2,"3",3),
    card_4((byte)3,"4",4),
    card_5((byte)4,"5",5),
    card_6((byte)5,"6",6),
    card_7((byte)6,"7",7),
    card_8((byte)7,"8",8),
    card_9((byte)8,"9",9),
    card_10((byte)9,"10",10),
    card_J((byte)10,"J",10),
    card_Q((byte)11,"Q",10),
    card_K((byte)12,"K",10),
    card_A((byte)13,"A",0);//point 1 or 11


    private static  FastList<CardType> cardTypeFastList=new FastList<CardType>(312);


    /**
     * 洗牌
     */
    public static void  resetCard(){
        cardTypeFastList.clear();
        for (CardType c:CardType.values()){
            for (int i=0;i!=24;++i){
                cardTypeFastList.add(c);
            }
        }
        Collections.shuffle(cardTypeFastList,Rnd.newInstance(Rnd.RandomType.UNSECURE_THREAD_LOCAL).directRandom());
    }


//    比如有10张牌 把这10张牌放入10个位置 第一张牌随机1～10 得出的数不是牌 而是“位置” 取出相应位置的牌 比如随机到了5 就取出5的位置对应的牌“5” 然后把5以后所有位置的牌往前移 第二轮随机1～9 比如又得到5 则取出5对应位置的牌“6” 第三轮随机1～8 如此一来 每次随机都会得出一张随机的牌

    private final byte id;
    private final String name;
    private final int point;//
    private CardType(final byte id, final String name,final int point) {
        this.id = id;
        this.name = name;
        this.point=point;
    }
    /**
     * 获取点数
     * @return
     */
    public int getPoint() {
        return point;
    }

    /**
     * 返回常量的值
     *
     * @return
     */
    public byte getID() {
        return this.id;  //To change body of implemented methods use File | Settings | File Templates.
    }

    /**
     * 返回常量的描述性名称
     *
     * @return
     */
    public String getName() {
        return this.name;
    }
    /**
     * 获取随机牌
     * @return
     */
    public static CardType getSecureCard(){
        CardType card=cardTypeFastList.getFirst();
        cardTypeFastList.remove(card);
        return  card;
    }
    /**
     * 根据牌的类型获取点数
     * @param cardType
     * @return Point
     */
    public static int getPointsByCardType(String cardType){
        for (CardType card:CardType.values()){
            if (card.getName().equalsIgnoreCase(cardType)){
                return card.getPoint();
            }
        }
        return 0;
    }
    public static void main(String[]args){
        resetCard();
        for (int i=0;i!=10;++i)
        System.out.println(getSecureCard());
    }
}
